/* --------------------------------------------------------- *
* __________ D E L T A S C R I P T *
* (_________() *
* / === / - A fast, dynamic scripting language *
* | == | - Version 4.13.11.0 *
* / === / - Developed by Adam R. Nelson *
* | = = | - 2011-2013 *
* / === / - Distributed under GNU LGPL v3 *
* (________() - http://github.com/ar-nelson/deltascript *
* *
* --------------------------------------------------------- */
package com.sector91.delta.script.test.doctest;
import static org.junit.Assert.*;
import java.io.File;
import java.util.List;
import java.util.Scanner;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized.Parameters;
import org.pegdown.PegDownProcessor;
import org.pegdown.ast.RootNode;
import com.sector91.delta.script.DScriptContext;
import com.sector91.delta.script.DScriptErr;
import com.sector91.delta.script.test.util.LabelledParameterized;
import com.sector91.util.A;
@RunWith(LabelledParameterized.class)
public class DocTestRunner
{
public static final String DOC_PATH = "src/main/markdown/";
private static final DScriptContext CONTEXT = new DScriptContext();
@Parameters
public static List<Object[]> parameters()
{
// Load the doc files.
return recursiveDocScan(new File(DOC_PATH));
}
private static List<Object[]> recursiveDocScan(File f)
{
final List<Object[]> list = A.list();
if (f.isDirectory())
{
for (File item : f.listFiles())
list.addAll(recursiveDocScan(item));
}
else if (f.isFile() && f.getName().endsWith(".md"))
{
System.out.println("Parsing file: " + f.getName());
try
{
final Scanner s = new Scanner(f, "UTF-8");
final String fileText = s.useDelimiter("\\Z").next();
s.close();
final PegDownProcessor processor = new PegDownProcessor();
final RootNode node = processor.parseMarkdown(
fileText.toCharArray());
final TestExtractorVisitor visitor = new TestExtractorVisitor(
f.getName(), CONTEXT);
node.accept(visitor);
for (DocTest test : visitor.getTests())
list.add(new Object[] {test.getName(), test});
}
catch (Exception ex)
{
System.out.println("!! Error reading file !!");
ex.printStackTrace(System.out);
}
}
return list;
}
private final DocTest test;
public DocTestRunner(String label, DocTest testToRun)
{test = testToRun;}
@Test public final void doctest() throws DScriptErr
{
try
{test.runTest();}
catch (DocTest.DocTestFailureException ex)
{fail(ex.getMessage());}
}
}